/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.compra.managed;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import sv.com.intesal.clases.LimpiarManaged;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.compra.bean.Material;
import sv.com.intesal.compra.bean.SolicitudMaterial;
import sv.com.intesal.compra.controlador.SolicitudMaterialControlador;
import sv.com.intesal.seguridad.controlador.SessionControlador;
import sv.com.intesal.seguridad.managed.SessionManaged;

/**
 *
 * @author andrew
 */
@ManagedBean(name = "solicitudMaterialManaged")
@ViewScoped
public class SolicitudMaterialManaged implements Serializable {

    private SessionManaged sm;
    private Mensaje m;
    private Boolean flag_1;
    private Boolean flag_2;
    /*MATERIAL*/
    private Material selectedMaterial;
    /*SOLICITUD MATERIAL*/
    private List<SolicitudMaterial> solicitudMateriales;
    private SolicitudMaterial selectedEncaSolicitudMaterial;
    private SolicitudMaterial selectedDetaSolicitudMaterial;

    public SolicitudMaterialManaged() {
        this.m = new Mensaje();
        this.sm = new SessionManaged();
        this.selectedEncaSolicitudMaterial = new SolicitudMaterial();
        this.selectedDetaSolicitudMaterial = new SolicitudMaterial();
        this.selectedMaterial = new Material();

        this.flag_1 = true;
        this.flag_2 = false;
    }

    public void eliminarRegistro() {
        try {

            if (this.selectedDetaSolicitudMaterial == null) {
                m.messageError("DEBE ELEGIR UN REGISTRO PARA CONTINUAR");
            } else if (selectedDetaSolicitudMaterial.getId_d() == 0) {
                this.solicitudMateriales.remove(this.selectedDetaSolicitudMaterial);
                m.messageInfo(m.getIeliminada());
            } else {
                if (sm.validar_rol_usuario("wfrmSolicitudMaterial", sm.eliminar) == true) {
                    this.solicitudMateriales.remove(this.selectedDetaSolicitudMaterial);
                    SolicitudMaterialControlador sc = new SolicitudMaterialControlador();
                    sc.eliminarItem(this.selectedDetaSolicitudMaterial);
                }
            }

        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    private boolean validarSolicitud() throws Exception {
        try {
            Boolean var_return = true;

            if (this.selectedEncaSolicitudMaterial.getFecha_s() == null) {
                m.messageError("El CAMPO FECHA ES REQUERIDO");
                var_return = false;
            }
            if (this.selectedEncaSolicitudMaterial.getSolicitante_s().equals("")) {
                m.messageError("El CAMPO SOLICITANTE ES REQUERIDO");
                var_return = false;
            }
            if (this.solicitudMateriales == null) {
                m.messageError("NO HAY MATERIALES EN LA LISTA");
                var_return = false;
            } else if (this.solicitudMateriales.size() <= 0) {
                m.messageError("NO HAY MATERIALES EN LA LISTA");
                var_return = false;
            } else if (this.solicitudMateriales.size() > 0) {
                for (int i = 0; i < this.solicitudMateriales.size(); i++) {
                    try {
                        if (this.solicitudMateriales.get(i).getCantidad_d() <= 0.0) {
                            m.messageAdvertencia("HAY CANTIDADES QUE NO SON ACEPTABLES");
                            var_return = false;
                            break;
                        }
                    } catch (Exception e) {
                        var_return = false;
                        break;
                    }
                }

            }
            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void completeTransaction() {
        try {
            /* Se ingresara el encabezado de la solicitud de material */
            if (this.validarSolicitud() == true) {
                if (this.selectedEncaSolicitudMaterial.getId_s() == null) {
                    if (sm.validar_rol_usuario("wfrmSolicitudMaterial", sm.agregar) == true) {

                        SolicitudMaterialControlador smc = new SolicitudMaterialControlador();
                        smc.setEnca(this.selectedEncaSolicitudMaterial, this.solicitudMateriales);
                        LimpiarManaged.limpiar();
                    }
                } else {
                    if (sm.validar_rol_usuario("wfrmSolicitudMaterial", sm.modificar) == true) {

                        SolicitudMaterialControlador smc = new SolicitudMaterialControlador();
                        smc.setEnca(this.selectedEncaSolicitudMaterial, this.solicitudMateriales);
                        LimpiarManaged.limpiar();
                    }
                }
            }
        } catch (Exception ex) {
            m.message(m.getIerror());
            ex.printStackTrace();
        }
    }

    public void getMaterial_Quick(Material ma) {

        try {
            this.selectedMaterial = ma;
            if (this.selectedMaterial != null) {
                List<SolicitudMaterial> lista = new ArrayList<SolicitudMaterial>();
                if (this.solicitudMateriales != null) {
                    lista = this.solicitudMateriales;
                }

                SolicitudMaterial som = new SolicitudMaterial();
                som.setNombre_m(this.getSelectedMaterial().getNombre_m());
                som.setId_d(0);
                som.setId_dm(this.getSelectedMaterial().getId_dm());
                som.setCantidad_d(0.0);
                lista.add(som);
                this.setSolicitudMateriales(lista);
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    public void validarModificarProceso() {
        /*VER SI EXISTE CODIGO PARA MODIFICAR PROCESO*/
        try {
            SessionControlador sc = new SessionControlador();
            if (sc.getCodigo_Proceso_Modificar() != 0) {
                this.flag_1 = false;
                this.flag_2 = true;

                SolicitudMaterialControlador smc = new SolicitudMaterialControlador();
                this.selectedEncaSolicitudMaterial = smc.getEncaSolicitudMaterial(sc.getCodigo_Proceso_Modificar());
                this.solicitudMateriales = smc.getDetaSolicitudMaterial(this.selectedEncaSolicitudMaterial.getId_s());
                sc.setCodigo_Proceso_Modificar(0);
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }
    /*  Setter and getters  */

    public Material getSelectedMaterial() {
        if (selectedMaterial == null) {
            selectedMaterial = new Material();
        }
        return selectedMaterial;
    }

    public void setSelectedMaterial(Material selectedMaterial) {
        this.selectedMaterial = selectedMaterial;
    }

    public List<SolicitudMaterial> getSolicitudMateriales() {
        return solicitudMateriales;
    }

    public void setSolicitudMateriales(List<SolicitudMaterial> solicitudMateriales) {
        this.solicitudMateriales = solicitudMateriales;
    }

    public SolicitudMaterial getSelectedDetaSolicitudMaterial() {
        if (selectedDetaSolicitudMaterial == null) {
            selectedDetaSolicitudMaterial = new SolicitudMaterial();
        }
        return selectedDetaSolicitudMaterial;
    }

    public void setSelectedDetaSolicitudMaterial(SolicitudMaterial selectedDetaSolicitudMaterial) {
        this.selectedDetaSolicitudMaterial = selectedDetaSolicitudMaterial;
    }

    public SolicitudMaterial getSelectedEncaSolicitudMaterial() {
        if (selectedEncaSolicitudMaterial == null) {
            selectedEncaSolicitudMaterial = new SolicitudMaterial();
        }
        return selectedEncaSolicitudMaterial;
    }

    public void setSelectedEncaSolicitudMaterial(SolicitudMaterial selectedEncaSolicitudMaterial) {
        this.selectedEncaSolicitudMaterial = selectedEncaSolicitudMaterial;
    }

    public Boolean getFlag_1() {
        return flag_1;
    }

    public void setFlag_1(Boolean flag_1) {
        this.flag_1 = flag_1;
    }

    public Boolean getFlag_2() {
        return flag_2;
    }

    public void setFlag_2(Boolean flag_2) {
        this.flag_2 = flag_2;
    }
}